package com.polaris.live.common.resp

import android.os.Parcelable

/**
 * 用户信息
 *
 * @author Created by 半仙 on 2023/8/15/015 17:17
 */
@kotlinx.parcelize.Parcelize
data class UserResp(
    /**
     * 用户id
     */
    val userId: Long? = null,
    /**
     * 用户显示号码
     */
    val userNumber: Long? = null,
    /**
     * token
     */
    val token: String? = null,
    /**
     * 登录类型
     */
    val loginType: Int? = null,
    /**
     * 区号
     */
    val areaCode: String? = null,
    /**
     * 手机号码
     */
    val phoneNumber: String? = null,
    /**
     * 登录邮箱
     */
    val loginEmail: String? = null,
    /**
     * 性别
     */
    var sex: Int = 0,
    /**
     * 头像
     */
    val avatar: String? = null,
    /**
     * 昵称
     */
    val nickname: String? = null,
    /**
     * 生日
     */
    val birthday: Long? = null,
    /**
     * 是否有密码
     */
    val hasPassword: Int = 0,
    /**
     * 用户状态(0禁用,1启用,2注销)
     */
    val status: Int? = null,
    /**
     * 是否完善了信息(0未完善，1完善）
     */
    val compInfo: Int? = null,
    /**
     * 注册时间
     */
    val createTime: Long? = null,
    //---------- status
    /**
     * 用户是否在线
     */
    val online: Int? = null,
    /**
     * 最后在线时间，IM登录
     */
    val lastOnlineTime: Long? = null,
    /**
     * 最后操作时间，IM登出，可能存在误差
     */
    val lastOperateTime: Long? = null,
    /**
     * 最后登录时间
     */
    val lastLoginTime: Long? = null,
    /**
     * 是否是审核中的头像
     */
    var auditingAvatar: String? = null,
    /**
     * 是否修改过头像
     */
    val avatarModified: Int? = null,
    /**
     * 是否修改过昵称
     */
    val nicknameModified: Int? = null,
    /**
     * 是否修改过生日
     */
    val birthdayModified: Int? = null,
    /**
     * 是否修改过国家
     */
    val countryModified: Int? = null,
    /**
     * 用户设备信息
     */
    val device: UserDeviceVo? = null,
    /**
     * 用户账户
     */
    val account: UserAccountVo? = null,
    /**
     * 用户属性
     */
    val profile: UserProfileVo? = null,
    /**
     * 用户标志类型
     */
    val flag: UserFlagVo? = null,
    /**
     * 用户类别信息
     */
    val category: UserCategoryVo? = null,
    /**
     * 用户设置信息
     */
    val setting: UserSettingDto? = null,
    /**
     * 用户通话信息
     */
    val call: UserCallVo? = null,
    /**
     * 用户直播信息
     */
    val live: UserLiveDto? = null,
    /**
     * 用户自己的封面信息
     */
    val coverPhoto: UserSelfCoverPhotoVo? = null,
    /**
     * 用户是否上传过相册
     */
    val photoAlbum: UserSelfAlbumPhotoVo? = null,
    /**
     * 用户进入展示和隐藏界面信息
     */
    val extension: UserSelfExtVo? = null,
    /**
     * 是否注册，只有第一次登录有效
     */
    val registered: Boolean? = null,
    /**
     * 主播等级
     */
    val femaleRating: FemaleRating? = null,
    /**
     * 是否开启游戏
     */
    val hasGame: Int = 0,
    /**
     * 装饰展示
     */
    val decoration: UserDecorationDto? = null,
    /**
     * UserPerkVo 用户的靓号信息
     */
    val perk: UserPerkVo? = null,
) : Parcelable

/**
 * femaleRating，主播等级
 */
@kotlinx.parcelize.Parcelize
data class FemaleRating(
    /**
     * 主播等级
     */
    var level: Long?,
) : Parcelable

/**
 * UserAccountVo，用户账户
 */
@kotlinx.parcelize.Parcelize
data class UserAccountVo(
    //---------- 这里可变主要是为了消费时的变化
    /**
     * 金额
     */
    var coins: Long,
    /**
     * 获得金额
     */
    var gainCoins: Long,
    /**
     * 冻结金额
     */
    var frozenCoins: Long,
    /**
     * 魅力值
     */
    var charms: Long,
    /**
     * 壕气值
     */
    var richs: Long,
    /**
     * 粉丝数
     */
    val fans: Long,
    /**
     * 关注数
     */
    val followers: Long,
    /**
     * 喜欢数
     */
    val likes: Long,
    /**
     * 访客数
     */
    val visits: Long,
    /**
     * 游戏币余额
     */
    var gameCoins: Long = 0,
    /**
     * 游戏币冻结的金币
     */
    var frozenGameCoins: Long = 0,
) : Parcelable {

    /**
     * 真实的钱
     */
    val userCoins: Long
        get() = coins + frozenCoins

    /**
     * 真实的游戏币
     */
    val userGameCoins: Long
        get() = gameCoins + frozenGameCoins

}

/**
 * UserCallDto，用户通话信息
 */
@kotlinx.parcelize.Parcelize
data class UserCallVo(
    /**
     * 是否正在通话中
     */
    val calling: Int? = null,

    /**
     * 通话类型
     */
    val callType: Int? = null,

    /**
     * 最后一次通话时间
     */
    val lastCallTime: String? = null,

    /**
     * 是否拥有通话资产
     */
    val callAsset: Boolean,

    /**
     * 资产数量
     */
    val callAssetCount: Int,
) : Parcelable

/**
 * UserSelfCoverPhotoVo，用户自己的封面信息
 */
@kotlinx.parcelize.Parcelize
data class UserSelfCoverPhotoVo(
    /**
     * 是否设置过封面
     */
    val hasCoverPhoto: Boolean,
    /**
     * 是否有效封面
     */
    val validCover: Boolean,
    /**
     * 是否有审核中封面
     */
    val hasAuditingCover: Boolean,
    /**
     * 房间封面
     */
    val roomCover: String?
) : Parcelable

/**
 * UserSelfAlbumPhotoVo，用户自己的相册信息
 */
@kotlinx.parcelize.Parcelize
data class UserSelfAlbumPhotoVo(
    /**
     * 是否上传过相册
     */
    val uploaded: Boolean,
) : Parcelable

/**
 * UserDeviceVo，用户设备信息
 */
@kotlinx.parcelize.Parcelize
data class UserDeviceVo(
    /**
     * 应用类型
     */
    val appType: Long,

    /**
     * 应用版本
     */
    val appVersion: String,

    /**
     * 编译版本
     */
    val buildVersion: Long,

    /**
     * 请求的ip地址
     */
    val ipAddress: String,

    /**
     * ip国家
     */
    val ipCountry: String? = null,

    /**
     * 纬度
     */
    val ipLatitude: Double? = null,

    /**
     * 经度
     */
    val ipLongitude: Double? = null,

    /**
     * 设备型号
     */
    val osModel: String,

    /**
     * 系统版本
     */
    val osVersion: String,

    /**
     * 平台类型
     */
    val platformType: Int,

    /**
     * 设备唯一码
     */
    val uniqueId: String,

    /**
     * 马甲类型
     */
    val variantType: Int,
) : Parcelable

/**
 * UserFlagVo，用户标志类型
 */
@kotlinx.parcelize.Parcelize
data class UserFlagVo(
    /**
     * 是否为审核用户
     */
    val auditStatus: Int,

    /**
     * 是否在列表中隐藏
     */
    val listHidden: Int? = null,

    /**
     * 是否官方账号
     */
    val official: Int,

    /**
     * 是否为充值用户
     */
    val recharged: Int,

    /**
     * 安全用户等级
     */
    val safeLevel: Int,

    /**
     * 用户安全类型
     */
    val safeType: Int,

    /**
     * 广告流量来源
     */
    var trafficSourceType: Int? = null,

    /**
     * 是否已经验证过安全的用户
     */
    val verifiedSafe: Int? = null,

    /**
     * 用户区域
     */
    val region: Int? = null,

    /**
     * 标签
     */
    val label: List<String>? = null,

    /**
     * 用户角色，与功能对应
     * /**
     *      * 国家经理，最顶级的经理角色，下面管理地区经理 1
     *      */
     *     COUNTRY_BD
     *
     *     /**
     *      * 地区经理，由国家经理管理，下面管理公会长 2
     *      *
     *      * 没有提现权限、没有公会成员
     *      */
     *     PROVINCE_BD,
     *
     *     /**
     *      * 主要用于显示一个客服标识 4
     *      */
     *     CUSTOMER_SERVICE
     *
     *     /**
     *      * 特指被邀请壕用户，[鲸鱼玩家] 8
     *      */
     *     INVITED_WHALE
     */
    val role: Long? = null,
) : Parcelable

/**
 * 用户进入展示和隐藏界面信息
 */
@kotlinx.parcelize.Parcelize
data class UserSelfExtVo(
    /**
     * 落地页
     */
    val landingPage: AppLandingPageVo? = null,
    /**
     * 是否允许提现
     */
    val allowWithdraw: Boolean? = null,
) : Parcelable

/**
 * AppLandingPageVo
 */
@kotlinx.parcelize.Parcelize
data class AppLandingPageVo(
    /**
     * 主落地页
     */
    val landingPage: AppSecondaryPageVo? = null,
    /**
     * 页面配置
     */
    val displayPage: MutableList<AppPrimaryPageVo>? = null,
) : Parcelable

/**
 * 选中页面
 */
@kotlinx.parcelize.Parcelize
data class AppSecondaryPageVo(
    /**
     * 一级界面
     */
    val primaryPage: Int,
    /**
     * 二级界面
     */
    val secondaryPage: Int,
) : Parcelable

/**
 *展示页面
 */
@kotlinx.parcelize.Parcelize
data class AppPrimaryPageVo(
    /**
     * 一级界面
     */
    val primaryPage: Int,
    /**
     * 二级界面
     */
    val secondaryPages: List<Int>,
    /**
     * 主二级页面
     */
    val secondaryMainPage: Int? = null,
) : Parcelable

/**
 * UserLiveDto，用户直播信息
 */
@kotlinx.parcelize.Parcelize
data class UserLiveDto(
    /**
     * 直播类型
     */
    val liveType: Int? = null,
    /**
     * 是否正在直播
     */
    val living: Int? = null,
    /**
     * 麦位信息
     */
    val partySite: Int? = null,
    /**
     * 游戏类型
     */
    val partyGameType: Int? = null,
    /**
     * 游戏状态
     */
    val partyGameStatus: Int? = null,
    /**
     * 是否在游戏
     */
    val partyGaming: Int? = null,
) : Parcelable

/**
 * UserLocationDto，用户定位信息
 */
@kotlinx.parcelize.Parcelize
data class UserLocationDto(
    /**
     * 国家
     */
    val country: String? = null,

    /**
     * 所在纬度
     */
    val latitude: Double? = null,

    /**
     * 所在经度
     */
    val longitude: Double? = null,
) : Parcelable

/**
 * UserProfileVo，用户属性
 */
@kotlinx.parcelize.Parcelize
data class UserProfileVo(
    /**
     * 关于我
     */
    val aboutMe: String? = null,

    /**
     * 公会id
     */
    val agencyId: Long? = null,

    /**
     * 拥有的公会id
     */
    val ownerAgencyId: Long? = null,

    /**
     * app语言
     */
    val appLanguage: String? = null,

    /**
     * 通话价格
     */
    val callPrice: Long,

    /**
     * 国家
     */
    val country: String,

    /**
     * 邮箱
     */
    val email: String? = null,

    /**
     * 用户首次系统语言
     */
    val firstLanguage: String,

    /**
     * 首次时区
     */
    val firstTimezone: String,

    /**
     * 用户系统语言
     *
     * 拿用户当前使用语言使用[userLanguage]
     */
    val language: String,

    /**
     * 省份
     */
    val province: String? = null,

    /**
     * 第二国家（用户自己选择）
     */
    val secondCountry: String? = null,

    /**
     * 第二国家（用户自己选择）
     */
    val secondCountryHidden: Long? = null,

    /**
     * 用户第二语言
     */
    val secondLanguage: String? = null,

    /**
     * 口语语言
     * 同声传译使用语言
     */
    var spokenLanguage: String? = null,

    /**
     * 时区
     */
    val timezone: String,
    /**
     * 关于我在审核中
     */
    val auditingAboutMe: Boolean? = null,
    /**
     * 是否允许修改关于我
     */
    val modifyAboutMe: Boolean? = null,
    /**
     * 展示指标
     */
    val showIndicator: Boolean? = null,

    /**
     * 用户当前的vip等级
     */
    val vipLevel: Long? = null,
) : Parcelable

/**
 * UserSettingDto，用户设置
 */
@kotlinx.parcelize.Parcelize
data class UserSettingDto(
    /**
     * 音视频通知开关
     */
    var callNotice: Int,
    /**
     * 消息通知开关
     */
    var chatNotice: Int,
    /**
     * 直播通知开关
     */
    var liveNotice: Int,
    /**
     * 同声传译开关
     */
    val simulInterpret: Long,
    /**
     * 消息勿扰开关
     */
    var messageDnd: Int,
    /**
     * 福袋通知开关 默认关
     */
    var luckyBagNotice: Int?,
    /**
     * 直播开关
     */
    var liveSwitch: Int?,
    /**
     * 最小化退出房间
     */
    var minimizeExitRoom: Int? = null,
    /**
     * 房间邀请消息免打扰
     */
    var roomInviteDnd: Int? = null,
) : Parcelable

@kotlinx.parcelize.Parcelize
data class UserCategoryVo(
    /**
     * 是男新
     */
    val newMale: Boolean,
    /**
     * 是女新
     */
    val newFemale: Boolean,
    /**
     * 是审核用户
     */
    val auditUser: Boolean,
    /**
     * 是安全用户
     */
    val safeUser: Boolean,
) : Parcelable

@kotlinx.parcelize.Parcelize
data class Ext(val remainTime: Int) : Parcelable

@kotlinx.parcelize.Parcelize
data class UserDecorationDto(
    /**
     * 头像框
     */
    val avatarFrame: String? = null,

    /**
     * 聊天气泡
     */
    val chatBubble: String? = null,

    /**
     * 直播进场座驾
     */
    val liveCar: String? = null,

    /**
     * 昵称颜色
     */
    val nicknameColor: String? = null,

    /**
     * 派对背景
     */
    val partyBackground: String? = null,

    /**
     * 资料卡片背景
     */
    val profileBackground: String? = null,

    /**
     * 个人空间背景
     */
    val userSpace: String? = null
) : Parcelable

/**
 * UserPerkVo 用户的靓号
 */
@kotlinx.parcelize.Parcelize
data class UserPerkVo(
    /**
     * 号码勋章
     */
    val numberMedal: String? = null,

    /**
     * 靓号
     */
    val vanityNumber: Long? = null,

    /**
     * 靓号颜色
     */
    val vanityNumberColor: String? = null,
) : Parcelable